wayland: Set a null cursor surface when cursor buffer is null
authorJonas Ådahl <jadahl@gmail.com>
Fri, 20 Nov 2015 08:49:12 +0000 (16:49 +0800)
committerMatthias Clasen <mclasen@redhat.com>
Fri, 20 Nov 2015 16:59:46 +0000 (11:59 -0500)
If the buffer of a cursor is NULL, for example if its an empty cursor,
just set the cursor surface to NULL as well. Not doing this we'll use
uninitialized hotspot coordinates, dimensions and scales.

https://bugzilla.gnome.org/show_bug.cgi?id=758025

gdk/wayland/gdkdevice-wayland.c

index 74aba25493fd52043c3a56fcb5e03469061336d5..2f86ee13c16404362ec6bd61d3ff8f3aa1ef0489 100644 (file)
@@ -225,16 +225,27 @@ gdk_wayland_device_update_window_cursor (GdkWaylandDeviceData *wd)
   if (!wd->wl_pointer)
     return retval;
 
-  wl_pointer_set_cursor (wd->wl_pointer,
-                         wd->enter_serial,
-                         wd->pointer_surface,
-                         x, y);
   if (buffer)
     {
       wl_surface_attach (wd->pointer_surface, buffer, 0, 0);
       wl_surface_set_buffer_scale (wd->pointer_surface, scale);
       wl_surface_damage (wd->pointer_surface,  0, 0, w, h);
       wl_surface_commit (wd->pointer_surface);
+
+      wl_pointer_set_cursor (wd->wl_pointer,
+                             wd->enter_serial,
+                             wd->pointer_surface,
+                             x, y);
+    }
+  else
+    {
+      wl_pointer_set_cursor (wd->wl_pointer,
+                             wd->enter_serial,
+                             NULL,
+                             0, 0);
+
+      wl_surface_attach (wd->pointer_surface, NULL, 0, 0);
+      wl_surface_commit (wd->pointer_surface);
     }
 
   if (wd->grab_cursor)